package com.ge.boot06core.controller;

import com.ge.boot06core.entity.UserEntity;
import com.ge.boot06core.event.EventPublisher;
import com.ge.boot06core.event.LoginSuccessEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 测试基于事件驱动开发<br>
 * 实现一个登录接口<br>
 * 在校验用户登录信息之后，还要进行以下处理：<br>
 * 1. 账户服务自动签到增加积分<br>
 * 2. 优惠服务随机发放优惠券<br>
 * 3. 系统服务登记用户登录信息<br>
 */
@RestController
public class LoginController {

    @Autowired
    EventPublisher eventPublisher;

    @RequestMapping("/login")
    public String login(@RequestParam("username") String userName,
                        @RequestParam("passwd") String passwd) {

        System.out.println("业务处理登录完成");

        // 按照常规开发方式，此处需要注入业务处理的Service并调用其中的方法
        // 以下基于事件驱动开发

        // 生成事件
        LoginSuccessEvent event = new LoginSuccessEvent(new UserEntity(userName, passwd));
        // 发布事件
        eventPublisher.sendEvent(event);

        return userName + " 登录成功";
    }
}
